
'''
需要安装的依赖：
安装时要注意先后顺序，pdfminer3k要优先安装
pdfminer3k         1.3.1
pdfminer.six       20200104

'''

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument


# 1.打开PDF文件，注意已二进制形式打开
fp = open('code/荷塘月色2.pdf', 'rb')

# 2.创建文档解析器和PDF文档对象并将两者关联
# 创建文档解析器
pdfparser = PDFParser(fp)
# 创建PDF文档对象并链接解释器和文档对象
doc = PDFDocument(pdfparser)

from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams

# 3.创建PDF资源管理器和参数分析器
# 创建PDF资源管理器
resource = PDFResourceManager()
# 参数分析器
laparm = LAParams()

# 4.创建聚合器并接收PDF资源管理器与参数分析器作为参数
device = PDFPageAggregator(resource, laparams=laparm)

# 5.创建页面解释器，将PDF资源管理器与聚合器作为参数
interpreter = PDFPageInterpreter(resource, device)

from pdfminer.pdfpage import PDFPage
from pdfminer.layout import LTTextBoxHorizontal, LAParams, LTImage, LTCurve, LTFigure
for page in PDFPage.create_pages(doc):
    # 使用页面解释器对PDF中的某一页进行读取
    interpreter.process_page(page)
    # 使用聚合器获取内容
    layout = device.get_result()

    for out in layout:
        # PDf文件中可能存在文字、图片等不同资源的内容
        # 在读取文字时，先要判断该资源是否为文字，如果是再使用get_text方法读取
        # if hasattr(out, 'get_text'): # 判断对象是否有get_text方法（属性）
        if isinstance(out, LTTextBoxHorizontal):
            print(out.get_text())
